home *** CD-ROM | disk | FTP | other *** search
- # bash completion for update-alternatives
-
- have update-alternatives && {
- _installed_alternatives()
- {
- local admindir
- # find the admin dir
- for i in alternatives dpkg/alternatives rpm/alternatives; do
- [ -d /var/lib/$i ] && admindir=/var/lib/$i && break
- done
- for (( i=1; i < COMP_CWORD; i++ )); do
- if [[ "${COMP_WORDS[i]}" == --admindir ]]; then
- admindir=${COMP_WORDS[i+1]}
- break
- fi
- done
- COMPREPLY=( $( compgen -W '$( command ls $admindir )' -- "$cur" ) )
- }
-
- _update_alternatives()
- {
- local cur prev mode args i
-
- COMPREPLY=()
- _get_comp_words_by_ref cur prev
-
- case $prev in
- --altdir|--admindir)
- _filedir -d
- return 0
- ;;
- --help|--usage|--version)
- return 0
- ;;
- esac
-
- # find which mode to use and how many real args used so far
- for (( i=1; i < COMP_CWORD; i++ )); do
- if [[ "${COMP_WORDS[i]}" == --@(install|remove|auto|display|config|remove-all|set) ]]; then
- mode=${COMP_WORDS[i]}
- args=$(($COMP_CWORD - i))
- break
- fi
- done
-
- case $mode in
- --install)
- case $args in
- 1|3)
- _filedir
- ;;
- 2)
- _installed_alternatives
- ;;
- 4)
- # priority - no completions
- ;;
- *)
- case $((args % 4)) in
- 0|2)
- _filedir
- ;;
- 1)
- COMPREPLY=( $( compgen -W '--slave' -- "$cur" ) )
- ;;
- 3)
- _installed_alternatives
- ;;
- esac
- esac
- ;;
- --remove|--set)
- case $args in
- 1)
- _installed_alternatives
- ;;
- 2)
- _filedir
- ;;
- esac
- ;;
- --auto|--remove-all|--display|--config)
- _installed_alternatives
- ;;
- *)
- COMPREPLY=( $( compgen -W '--verbose --quiet --help --version \
- --altdir --admindir --install --remove --auto --display \
- --config --set' -- "$cur" ) )
- esac
- }
- complete -F _update_alternatives update-alternatives alternatives
- }
-
- # Local variables:
- # mode: shell-script
- # sh-basic-offset: 4
- # sh-indent-comment: t
- # indent-tabs-mode: nil
- # End:
- # ex: ts=4 sw=4 et filetype=sh
-